iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0

...為什麼 PHP 的變數宣告要使用 $ 符號?...PHP 在變數前使用 $ 的用意是提醒開發者,宣告變數是需要花費記憶體空間成本的。也因此,PHP 開發者比其他語言的開發者更重視記憶體配置。--節錄自民明書坊刊,你所不知道的 PHP 真相

安安,今天想跟大家介紹幾個不錯的 New Features。
順便當個公道伯(但我也才寫一年多)出來幫 Modern PHP 平反一下。

PHP 很難用ㄟ!甘阿捏?

因為身邊不少人沒用過 PHP,看看老舊的網路文章就覺得 PHP 很難用,真ㄉ是醬咪?
或是某些原因下被迫使用 PHP 留下不好回憶(?)的閱讀者,希望你看完覺得,「哎呀,是我誤會了呢 >"<」。

PHP 是弱型別,沒辦法做靜態語法檢查,超難用的啦!

甘阿捏?
其實 PHP 7 就提供了引數型別宣告與函式回傳宣告唷。

<?php

function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

聽說 PHP 很不安全ㄟ。我聽說我老師說的。

甘阿捏?
我看不安全的是寫的人吧。

[討論] PHP是個漏洞多且不安全的後端語言? | alpe
[討論] PHP是個漏洞多且不安全的後端語言? | MoMoShota
[討論] PHP是個漏洞多且不安全的後端語言? | GALINE

PHP 命名很混亂,檔案結構也混亂。

甘阿捏?
你都不用 PSR、MVC 框架?

PHP 怎麼還沒死?

PHP 還沒死,而且還有在更新。
很多你想問怎麼還沒死的東西,其實都有在更新。

除了前面介紹的強型別模式,以下是我目前有用到的 featuers(和寫這篇文查到覺得好像滿方便的 features)。

原本只想介紹新 featuers,後來發現要確認是哪一版出的有點麻煩,就決定不分版本,請直接升到最新版 ><

Null coalescing operator
Null 檢查的語法糖。

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

物件::class
物件可以返回整個 class。

$foo = new Foo();

var_dump($foo::class);

如果是 ClassName::class 返回的是 ClassName

箭頭函示

fn() => file_get_contents($path);

array merge
原本

array_merge( $arrA, $arrB)

8.1 New Feature

[…$arrA, …$arrB]

function no return

function () : never
{
}

If return will throw fatal error

property assignment
過去不想被變可能要用 protected + getter,8.1 後可以宣告 public readonly

function (public readonly) : never
{
}

待補 >"<

ref


上一篇
18. PHPer x API document x Swagger API
下一篇
20. 完賽感言 x 關於提升程式碼的品質
系列文
每天一篇文章30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言